<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    var canChoose = (groups, nums) => {
      // 添加前缀逗号, 来避免类似 [[2, 1]] [12, 1] 这样的字符串匹配出现true
      // 但是实际上应该是false的
      let s = ',' + nums.join()

      for (let g of groups) {
        // 子数组合并成子字符串的时候, 也要加上一个前缀逗号
        // 这样 ,2,1 != ,12,1
        // 保证查询子字符串的时候, 不会造成 2,1 包含于 12,1这样的误判
        let index = s.indexOf(',' + g.join())
        if (index < 0) return false

        // 此处的 +1, 就是上面子字符串前缀添加逗号产生的额外长度
        s = s.slice(index + g.join().length + 1)
      }
      return true

    }
    console.log(canChoose(groups = [[1, -1, -1], [3, -2, 0]], nums = [1, -1, 0, 1, -1, -1, 3, -2, 0]))


    var canChoose = function (groups, nums) {
      let i = 0;
      for (let k = 0; k < nums.length && i < groups.length;) {
        if (check(groups[i], nums, k)) {
          k += groups[i].length;
          i++;
        } else {
          k++;
        }
      }
      return i === groups.length;
    }

    const check = (g, nums, k) => {
      if (k + g.length > nums.length) {
        return false;
      }
      for (let j = 0; j < g.length; j++) {
        if (g[j] !== nums[k + j]) {
          return false;
        }
      }
      return true;
    };


  </script>
</body>

</html>